home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / source / Soundfx source / soundfx.src next >
Text File  |  2006-10-19  |  47KB  |  2,035 lines

  1. *
  2. * Sound F/X - 1991 - Barry Boone
  3. *
  4.  
  5.        AORG >2000
  6.  
  7. * Geneve memory manager will bring in pages @ >A000 (using >8005)
  8.  
  9. *
  10. * Program
  11. *
  12.        DEF  START,ISTART,SLOAD,SFIRST,SLAST
  13.  
  14. SLOAD
  15. SFIRST B    @MKR
  16. NO9938 DATA 0                 -1 = No 9938 RAM used
  17. NOEXP  DATA 0                 -1 = No EXP VRAM used
  18. NOCPU  DATA 0                 -1 = No CPU RAM used
  19. NOSCRT DATA 0                 -1 = No SC/SS RAM used
  20. NOGEN  DATA 0                 -1 = No 9640 RAM used
  21.  
  22. GENFLG DATA 0                 -1 = Geneve, else 99/4A
  23. SCFLAG DATA 0                 -1 = Supercart, else not
  24. SSFLAG DATA 0                 -1 = 32K Scart, else not
  25. VDPFLG DATA 0                 -1 = 9938 present, else not
  26. EXPFLG DATA 0                 -1 = 9938 Expansion VRAM present
  27. SSPGS  DATA 0                 # of SS pages in use/# of Geneve pages in use
  28. SCEND  DATA 0                 Last addr used in last page (9640 or SC)
  29. VDPPGS DATA 0                 # of 9938 vid pages in use
  30. VDPEND DATA 0                 last addr in last block of 9938 vram
  31. EXPPGS DATA 0                 # of 9938 exp vid pages used
  32. EXPEND DATA 0                 last addr in last block of exp vram
  33. VIDSIZ DATA 0                 buffer size of block 0 vram buffer
  34. MEMSIZ DATA 0                 Combined size of all buffers (in 1K increments)
  35. GENMEM DATA 0                 # of 9640 memory pages available
  36. CHNFLG DATA 0                 Chained files flag
  37.  
  38. CSR    BYTE '_'
  39. SPC    BYTE ' '
  40.  
  41. * these can be EQU'd to the 2nd word in an LI instruction, if mem gets tight
  42.  
  43. D7     DATA 7
  44. D8     DATA 8
  45. D10    DATA 10
  46. D16    DATA 16
  47. D18    DATA 18
  48. D24    DATA 24
  49. D64    DATA 64
  50. D96    DATA 96
  51. D760   DATA 760
  52.  
  53. SSPCDT BYTE 2,8,>20,>80
  54. NREGS  BYTE >00,>F0,>00,>0E,>01
  55.        BYTE >06,>01,>F4
  56. MEN1   TEXT '1 - Load F/X File'
  57. MEN2   TEXT '2 - Play Sound in Buffer'
  58. MEN3   TEXT '3 - Change Parameters'
  59. MEN4   TEXT '4 - Disk Catalog'
  60. MEN4A  TEXT '5 - Convert Sound File'
  61. MEN5   TEXT 'Q - Exit Program'
  62. MSG1   TEXT 'Sound F/X V1.0a 11/14/91'
  63. MSG2   TEXT 'Copyright 1991  by Barry Boone'
  64. NOTFXF TEXT 'Error - File not in F/X Format'
  65. HEX5   BYTE 5
  66. STAB   DATA 8,MSG1,24,45,MSG2,30
  67.        DATA 290,MEN1,17,370,MEN2,24
  68.        DATA 450,MEN3,21,530,MEN4,16
  69.        DATA 610,MEN4A,22,690,MEN5,16,0
  70. DIVLIN DATA >0000,>FF00,>FF00,>0000
  71. MSGINP TEXT 'Input '
  72. MSG4   TEXT 'Filename:'
  73. MSGOUT TEXT 'Output Filename:'
  74. PTHMSG TEXT 'Device:  '
  75. MSG6   TEXT 'I/O Error, '
  76. MSG6K  TEXT 'Press any key'
  77. MEMTXT TEXT 'Buffer Size: '
  78. MEMTX2 TEXT '####K'
  79. MAXTXT TEXT 'Max. File Size: '
  80. MAXTX2 TEXT '#### Sectors'
  81. PROCTX TEXT 'Processing...'
  82. LOADTX TEXT 'Loading...'
  83. CHAINT TEXT 'Press FCTN-6 if last file is loaded.'
  84. CHAIN2 TEXT 'Insert Next Disk and Press Any Key'
  85. AMPTXT TEXT 'Amplification Factor: '
  86. AMPFAC TEXT '  0%'
  87. SPCMOD TEXT '(Spacebar to adjust, Enter to accept)'
  88. SVA000 BYTE 0                 Saved >A000 page for Geneve
  89. CCPAK  TEXT 'Conversion Complete. Press Any Key.'
  90. PLYTXT TEXT '<Playing...>' 12
  91. USATXT TEXT 'Use Arrow Keys to Move Marker' 29
  92. LCDTXT TEXT '(S)ubdir (L)oad F/X (C)onvert F/X'  33
  93. DSPTXT TEXT 'Press SPACEBAR to Continue Cataloging' 37
  94.  
  95. AMPLVL DATA 0                 Current Amplification Level
  96. GIFOPL DATA >0409
  97. CVTOPL DATA >0489
  98. OPNFIL DATA 0                -1 = file opened!
  99. SNDMEM DATA 0                -1 = Sound file in memory
  100. ENDADR DATA 0                On 99/4a, is end of sound in memory
  101. FXH    TEXT 'FX'             Header for FX files
  102. TSTIT  DATA 0
  103. H9938  DATA >9938
  104.  
  105. BLKDAT DATA >9090,>9090,>9090,>9090
  106.        DATA >9090,>9090,>9090,>9090
  107.        DATA >9191,>9191,>9191,>9191
  108.        DATA >9191,>9191,>9191,>9191
  109.        DATA >9292,>9292,>9292,>9292
  110.        DATA >9292,>9292,>9292,>9292
  111.        DATA >9393,>9393,>9393,>9393
  112.        DATA >9393,>9393,>9393,>9393
  113.        DATA >9494,>9494,>9494,>9494
  114.        DATA >9494,>9494,>9494,>9494
  115.        DATA >9595,>9595,>9595,>9595
  116.        DATA >9595,>9595,>9595,>9595
  117.        DATA >9696,>9696,>9696,>9696
  118.        DATA >9696,>9696,>9696,>9696
  119.        DATA >9797,>9797,>9797,>9797
  120.        DATA >9797,>9797,>9797,>9797
  121.        DATA >9898,>9898,>9898,>9898
  122.        DATA >9898,>9898,>9898,>9898
  123.        DATA >9999,>9999,>9999,>9999
  124.        DATA >9999,>9999,>9999,>9999
  125.        DATA >9A9A,>9A9A,>9A9A,>9A9A
  126.        DATA >9A9A,>9A9A,>9A9A,>9A9A
  127.        DATA >9B9B,>9B9B,>9B9B,>9B9B
  128.        DATA >9B9B,>9B9B,>9B9B,>9B9B
  129.        DATA >9C9C,>9C9C,>9C9C,>9C9C
  130.        DATA >9C9C,>9C9C,>9C9C,>9C9C
  131.        DATA >9D9D,>9D9D,>9D9D,>9D9D
  132.        DATA >9D9D,>9D9D,>9D9D,>9D9D
  133.        DATA >9E9E,>9E9E,>9E9E,>9E9E
  134.        DATA >9E9E,>9E9E,>9E9E,>9E9E
  135.        DATA >9F9F,>9F9F,>9F9F,>9F9F
  136.        DATA >9F9F,>9F9F,>9F9F,>9F9F
  137. BLKDA2 DATA >B0B0,>B0B0,>B0B0,>B0B0
  138.        DATA >B0B0,>B0B0,>B0B0,>B0B0
  139.        DATA >B1B1,>B1B1,>B1B1,>B1B1
  140.        DATA >B1B1,>B1B1,>B1B1,>B1B1
  141.        DATA >B2B2,>B2B2,>B2B2,>B2B2
  142.        DATA >B2B2,>B2B2,>B2B2,>B2B2
  143.        DATA >B3B3,>B3B3,>B3B3,>B3B3
  144.        DATA >B3B3,>B3B3,>B3B3,>B3B3
  145.        DATA >B4B4,>B4B4,>B4B4,>B4B4
  146.        DATA >B4B4,>B4B4,>B4B4,>B4B4
  147.        DATA >B5B5,>B5B5,>B5B5,>B5B5
  148.        DATA >B5B5,>B5B5,>B5B5,>B5B5
  149.        DATA >B6B6,>B6B6,>B6B6,>B6B6
  150.        DATA >B6B6,>B6B6,>B6B6,>B6B6
  151.        DATA >B7B7,>B7B7,>B7B7,>B7B7
  152.        DATA >B7B7,>B7B7,>B7B7,>B7B7
  153.        DATA >B8B8,>B8B8,>B8B8,>B8B8
  154.        DATA >B8B8,>B8B8,>B8B8,>B8B8
  155.        DATA >B9B9,>B9B9,>B9B9,>B9B9
  156.        DATA >B9B9,>B9B9,>B9B9,>B9B9
  157.        DATA >BABA,>BABA,>BABA,>BABA
  158.        DATA >BABA,>BABA,>BABA,>BABA
  159.        DATA >BBBB,>BBBB,>BBBB,>BBBB
  160.        DATA >BBBB,>BBBB,>BBBB,>BBBB
  161.        DATA >BCBC,>BCBC,>BCBC,>BCBC
  162.        DATA >BCBC,>BCBC,>BCBC,>BCBC
  163.        DATA >BDBD,>BDBD,>BDBD,>BDBD
  164.        DATA >BDBD,>BDBD,>BDBD,>BDBD
  165.        DATA >BEBE,>BEBE,>BEBE,>BEBE
  166.        DATA >BEBE,>BEBE,>BEBE,>BEBE
  167.        DATA >BFBF,>BFBF,>BFBF,>BFBF
  168.        DATA >BFBF,>BFBF,>BFBF,>BFBF
  169. BLKDA3 DATA >D0D0,>D0D0,>D0D0,>D0D0
  170.        DATA >D0D0,>D0D0,>D0D0,>D0D0
  171.        DATA >D1D1,>D1D1,>D1D1,>D1D1
  172.        DATA >D1D1,>D1D1,>D1D1,>D1D1
  173.        DATA >D2D2,>D2D2,>D2D2,>D2D2
  174.        DATA >D2D2,>D2D2,>D2D2,>D2D2
  175.        DATA >D3D3,>D3D3,>D3D3,>D3D3
  176.        DATA >D3D3,>D3D3,>D3D3,>D3D3
  177.        DATA >D4D4,>D4D4,>D4D4,>D4D4
  178.        DATA >D4D4,>D4D4,>D4D4,>D4D4
  179.        DATA >D5D5,>D5D5,>D5D5,>D5D5
  180.        DATA >D5D5,>D5D5,>D5D5,>D5D5
  181.        DATA >D6D6,>D6D6,>D6D6,>D6D6
  182.        DATA >D6D6,>D6D6,>D6D6,>D6D6
  183.        DATA >D7D7,>D7D7,>D7D7,>D7D7
  184.        DATA >D7D7,>D7D7,>D7D7,>D7D7
  185.        DATA >D8D8,>D8D8,>D8D8,>D8D8
  186.        DATA >D8D8,>D8D8,>D8D8,>D8D8
  187.        DATA >D9D9,>D9D9,>D9D9,>D9D9
  188.        DATA >D9D9,>D9D9,>D9D9,>D9D9
  189.        DATA >DADA,>DADA,>DADA,>DADA
  190.        DATA >DADA,>DADA,>DADA,>DADA
  191.        DATA >DBDB,>DBDB,>DBDB,>DBDB
  192.        DATA >DBDB,>DBDB,>DBDB,>DBDB
  193.        DATA >DCBC,>DCBC,>DCBC,>DCBC
  194.        DATA >DCDC,>DCDC,>DCDC,>DCDC
  195.        DATA >DDDD,>DDDD,>DDDD,>DDDD
  196.        DATA >DDDD,>DDDD,>DDDD,>DDDD
  197.        DATA >DEDE,>DEDE,>DEDE,>DEDE
  198.        DATA >DEDE,>DEDE,>DEDE,>DEDE
  199.        DATA >DFDF,>DFDF,>DFDF,>DFDF
  200.        DATA >DFDF,>DFDF,>DFDF,>DFDF
  201. BLKTB1 DATA >9091,>9293,>9495,>9697
  202.        DATA >9899,>9A9B,>9C9D,>9E9F
  203. BLKTB2 DATA >B0B1,>B2B3,>B4B5,>B6B7
  204.        DATA >B8B9,>BABB,>BCBD,>BEBF
  205. BLKTB3 DATA >D0D1,>D2D3,>D4D5,>D6D7
  206.        DATA >D8D9,>DADB,>DCDD,>DEDF
  207.  
  208. * Myarc 9640 memory page table
  209.  
  210. MEM964 BYTE >28,>29,>2A,>2B,>2C,>2D          Myword memory - 8 pages
  211.        BYTE >2E,>2F
  212.  
  213.        BYTE >C0,>C1,>C2,>C3,>C4,>C5          Memex bank 3 - 40 pages
  214.        BYTE >C6,>C7,>C8,>C9,>CA,>CB
  215.        BYTE >CC,>CD,>CE,>CF,>D0,>D1
  216.        BYTE >D2,>D3,>D4,>D5,>D6,>D7
  217.        BYTE >D8,>D9,>DA,>DB,>DC,>DD
  218.        BYTE >DE,>DF,>E0,>E1,>E2,>E3
  219.        BYTE >E4,>E5,>E6,>E7
  220.  
  221.        BYTE >80,>81,>82,>83,>84,>85          Memex bank 2 - 62 pages
  222.        BYTE >86,>87,>88,>89,>8A,>8B
  223.        BYTE >8C,>8D,>8E,>8F,>90,>91
  224.        BYTE >92,>93,>94,>95,>96,>97
  225.        BYTE >98,>99,>9A,>9B,>9C,>9D
  226.        BYTE >9E,>9F,>A0,>A1,>A2,>A3
  227.        BYTE >A4,>A5,>A6,>A7,>A8,>A9
  228.        BYTE >AA,>AB,>AC,>AD,>AE,>AF
  229.        BYTE >B0,>B1,>B2,>B3,>B4,>B5
  230.        BYTE >B6,>B7,>B8,>B9,>BB,>BD
  231.        BYTE >BE,>BF
  232.  
  233.        BYTE >40,>41,>42,>43,>44,>45          Memex bank 1 - 63 pages
  234.        BYTE >46,>47,>48,>49,>4A,>4B
  235.        BYTE >4C,>4D,>4E,>4F,>50,>51
  236.        BYTE >52,>53,>54,>55,>56,>57
  237.        BYTE >58,>59,>5A,>5B,>5C,>5D
  238.        BYTE >5E,>5F,>60,>61,>62,>63
  239.        BYTE >64,>65,>66,>67,>68,>69
  240.        BYTE >6A,>6B,>6C,>6D,>6E,>6F
  241.        BYTE >70,>71,>72,>73,>74,>75
  242.        BYTE >76,>77,>78,>79,>7B,>7C
  243.        BYTE >7D,>7E,>7F
  244.  
  245.        BYTE >36,>37,>3F,>3E,>3D,>3C          Cart pages/GROM 7,6,5,4  [33 pgs]
  246.        BYTE >03,>39,>3A,>16,>17,>18          SPg 3/GROM 1,2/MEM >16+
  247.        BYTE >19,>1A,>1B,>1C,>1D,>1E
  248.        BYTE >1F,>20,>21,>22,>23,>24
  249.        BYTE >25,>26,>27,>30,>31,>33
  250.        BYTE >34,>35,>3B                      GROM 3
  251. MEM96$ EQU  $
  252.  
  253. SNDINI DATA >8100,>A100,>C100
  254.  
  255. CLS    BLWP @VMBFD
  256. BYT0   DATA 0,>2020,960
  257.        RT
  258.  
  259. LDREGS LI   R0,>0080         Load vr0-7
  260.        MOVB @1(R1),@>83D4
  261. IVRL1  MOVB *R1+,R0
  262.        SWPB R0
  263.        BLWP @VWTR
  264.        AI   R0,>100
  265.        ANDI R0,>FF00
  266.        CI   R0,>8800
  267.        JEQ  IVRK2
  268.        SWPB R0
  269.        JMP  IVRL1
  270. IVRK2  RT
  271.  
  272. CHOICE MOV  R11,R10          R8 = pointer to pointers
  273.        MOV  R10,R9           R9 = saved pointer to chars
  274. CHOICN MOVB *R10+,R1         R10 = working ptr to chars
  275.        JNE  CHOICN           Locate "null"
  276.        INC  R10
  277.        ANDI R10,>FFFE        Make it even
  278.        MOV  R10,R8
  279. CHOICL LI   R1,' _'
  280.        MOV  R9,R10
  281.        MOVB *R10,R1          Select "default"
  282.        BL   @KEYINB
  283.        CI   R1,>0D00         <enter> key?
  284.        JNE  CHOICA
  285.        MOVB *R10+,R1         Place this character in default position
  286.        CB   R1,@SPC          If space char, ignore it
  287.        JEQ  CHOICL
  288.        JMP  CHOICB
  289. CHOICA INC  R10
  290. CHOICB CB   R1,*R10          Is this it?
  291.        JEQ  CHOICC
  292.        MOVB *R10+,R12        Nul?
  293.        JNE  CHOICB
  294.        JMP  CHOICL
  295. CHOICC S    R9,R10
  296.        SLA  R10,1            *2
  297.        A    R10,R8
  298.        BLWP @VSBW            Echo char to screen
  299.        CB   *R9,@SPC         Save new default?
  300.        JEQ  CHOICD
  301.        MOVB R1,*R9
  302. CHOICD MOV  @-2(R8),R8
  303.        B    *R8
  304.  
  305. NOF9   DATA 0
  306. KEYIN  LI   R1,'_ '
  307. KEYINB LI   R12,300
  308.        BLWP @VSBW
  309.        MOVB @HEX5,@>8374
  310. KEYINL BLWP @KSCAN
  311.        CB   @SPC,@>837C
  312.        JEQ  KEYINX
  313.        DEC  R12
  314.        JNE  KEYINL
  315.        SWPB R1
  316.        JMP  KEYINB
  317. KEYINX CLR  R1
  318.        MOVB @>8375,R1
  319. CFCTN9 ABS  @NOF9
  320.        JNE  KEYINR
  321. FCTN9  EQU  $+2
  322.        CI   R1,>0F00
  323.        JEQ  KEYINM
  324. CTRLC  EQU  $+2
  325.        CI   R1,>8300
  326.        JNE  KEYINR
  327. KEYINM B    @ISTART
  328. KEYINR RT
  329.  
  330. READX  S    R8,R9
  331.        B    *R10
  332. READLN CLR  R8
  333. REDLN2 MOVB *R11+,@MININC
  334.        MOVB *R11+,@MAXINC
  335.        MOV  R11,R10
  336.        MOV  R9,R1
  337.        BLWP @VMBW
  338.        A    R8,R0    R0=scrnloc
  339.        A    R8,R9
  340. READL1 LI   R1,' _'  R2=maxlen
  341.        MOVB *R9,R1   R8=curlen
  342.        SWPB R1
  343.        BL   @KEYINB  R9=buffer loc
  344. MAXINC EQU  $+2
  345.        CI   R1,>7E00
  346.        JH   READL1
  347. MININC EQU  $+2
  348.        CI   R1,>2000
  349.        JL   CTRLCK
  350.        BLWP @VSBW
  351.        MOVB R1,*R9+
  352. READL2 INC  R0
  353.        INC  R8
  354.        C    R8,R2
  355.        JNE  READL1
  356.        DEC  R0
  357.        DEC  R8
  358.        DEC  R9
  359.        JMP  READL1
  360. CTRLCK CI   R1,>800
  361.        JNE  CKENT
  362.        MOV  R8,R8
  363.        JEQ  READL1
  364.        DEC  R8
  365.        MOVB *R9,R1
  366.        BLWP @VSBW
  367.        DEC  R9
  368.        DEC  R0
  369.        JMP  READL1
  370. CKENT  CI   R1,>D00
  371.        JNE  CKERAS
  372.        MOV  R8,R8
  373.        JNE  CKENT2
  374.        CB   *R9,@H20
  375.        JEQ  READL1
  376. CKENT2 MOVB *R9,R1
  377.        BLWP @VSBW
  378.        JMP  READX
  379. CKERAS CI   R1,>700
  380.        JNE  CKFOR
  381.        S    R8,R0
  382.        S    R8,R9
  383.        CLR  R8
  384. ZAPBUF MOVB @READL1+2,*R9+
  385.        INC  R8
  386.        C    R8,R2
  387.        JNE  ZAPBUF
  388.        S    R8,R9
  389.        CLR  R8
  390.        MOV  R9,R1
  391.        BLWP @VMBW
  392.        JMP  READL1
  393. CKFOR  CI   R1,>900
  394.        JNE  CKDEL
  395.        MOVB *R9+,R1
  396.        BLWP @VSBW
  397.        JMP  READL2
  398. CKDEL  CI   R1,>300
  399.        JNE  CKINS
  400.        MOV  R8,R11
  401.        MOV  R9,R1
  402. CKDEL1 MOVB @1(R1),*R1
  403.        INC  R1
  404.        INC  R11
  405.        C    R11,R2
  406.        JNE  CKDEL1
  407.        DEC  R11
  408.        A    R9,R11
  409.        S    R8,R11
  410.        MOVB @H20,*R11
  411.        MOV  R9,R1
  412.        S    R8,R1
  413.        S    R8,R0
  414.        BLWP @VMBW
  415.        A    R8,R0
  416. CKDEL2 B    @READL1
  417. CKINS  CI   R1,>400
  418.        JNE  CKDEL2
  419.        MOV  R9,R1
  420.        S    R8,R1
  421.        MOV  R2,R11
  422.        A    R2,R1
  423. CKINS1 DEC  R1
  424.        DEC  R11
  425.        C    R11,R8
  426.        JEQ  NOWSP
  427.        MOVB @-1(R1),*R1
  428.        JMP  CKINS1
  429. NOWSP  MOVB @H20,*R1
  430.        S    R8,R0
  431.        MOV  R9,R1
  432.        S    R8,R1
  433.        BLWP @VMBW
  434.        A    R8,R0
  435.        JMP  CKDEL2
  436. * convert ASCII to binary...
  437. TEN    DATA 10
  438. ASCBIN CLR  R7              R9 points to incoming text
  439. ASCBN2 CB   *R9,@SPC         Locate first #
  440.        JNE  ASCLOP
  441.        INC  R9
  442.        DEC  R2
  443.        JNE  ASCBN2
  444. ASCLOP MOVB *R9+,R8
  445.        AI   R8,->3000
  446.        SRL  R8,8
  447.        A    R8,R7
  448.        CB   *R9,@SPC
  449.        JEQ  ASCXIT
  450.        DEC  R2
  451.        JEQ  ASCXIT
  452.        MPY  @TEN,R7
  453.        MOV  R8,R7
  454.        JMP  ASCLOP
  455. ASCXIT RT
  456. *
  457. BINASC MOVB @SPC,*R9+         clear number area
  458.        DEC  R2
  459.        JNE  BINASC
  460. BINASN MOV  R7,R8
  461. BINAS2 CLR  R7
  462.        DIV  @TEN,R7
  463.        SLA  R8,8
  464.        AI   R8,>3000
  465.        DEC  R9
  466.        DEC  R15               R6 used to guarantee a certain length
  467.        MOVB R8,*R9
  468.        MOV  R7,R8
  469.        JNE  BINAS2
  470.        MOV  R15,R15
  471.        JGT  BINAS2
  472.        RT
  473.  
  474. PRSCVT LI   R1,CVTNAM
  475.        JMP  PRSALE
  476. PRSFNM LI   R1,DEVNAM        Now parse the filename
  477. PRSALE MOV  R1,R0
  478.        MOV  R11,@PRSFNX+2
  479.        MOV  R0,R11
  480.        AI   R11,40
  481. GPRSIN CB   @SPC,*R1+        Second entry for CONVRT
  482.        JEQ  EPRSIN
  483.        C    R1,R11
  484.        JNE  GPRSIN
  485. EPRSIN S    R0,R1
  486.        DEC  R1
  487.        MOV  R1,@-42(R11)
  488. PRSFNX B    @0
  489. *
  490. VECTR2 DATA >0024
  491. TSTXXX DATA >A55A
  492. GENR5L DATA >F00B
  493.  
  494. * Delete page from 9640 list - R0 MSB = page # to delete
  495.  
  496. GENDEL LI   R1,MEM964
  497. GENDLL CB   R0,*R1+
  498.        JEQ  GDELIT
  499.        CI   R1,MEM96$
  500.        JNE  GENDLL
  501.        RT
  502. GDELIT DEC  R1
  503.        SB   *R1,*R1
  504.        RT
  505.  
  506. * Init memory map of 9640
  507.  
  508. GNINIT MOV  R11,R10
  509.        MOV  @D18,@DELCNT
  510.        C    @2,@VECTR2
  511.        JNE  DOEXEC
  512.        CLR  R0
  513.        MOVB R0,@>8005
  514.        LI   R2,>BF00
  515. GENDLP MOVB *R2+,R0
  516.        BL   @GENDEL           kill reserved pages
  517.        CI   R2,>BF08
  518.        JNE  GENDLP
  519.        JMP  ZAPPGS
  520. DOEXEC LI   R2,>8000
  521. EXCDLP MOVB *R2+,R0
  522.        BL   @GENDEL           kill resv'd pages (for EXEC)
  523.        CI   R2,>8003          don't kill page @>6000
  524.        JNE  DODODX
  525.        INC  R2
  526. DODODX CI   R2,>8005
  527.        JNE  EXCDLP
  528.  
  529. ZAPPGS LI   R2,MEM964         test all mem pages, delete any ROM areas
  530. ZAPPLP MOVB *R2+,R0
  531.        JEQ  SKNEXT
  532.        MOVB R0,@>8005
  533.        MOV  @>A000,R4
  534.        MOV  @TSTXXX,@>A000    put in tst data
  535.        C    @TSTXXX,@>A000    see if it wrote
  536.        JEQ  SKNET2            yup, page exists
  537.        BL   @GENDEL           nope, delete it
  538. SKNET2 MOV  R4,@>A000         restore old value
  539. SKNEXT CI   R2,MEM96$
  540.        JNE  ZAPPLP
  541.        CLR  R4
  542.        LI   R2,MEM964         now fix mem list
  543.        LI   R3,MEM964
  544. FIXLST MOVB *R3+,R1
  545.        JEQ  NOTHER
  546.        MOVB R1,*R2+
  547.        INC  R4
  548. NOTHER CI   R3,MEM96$
  549.        JNE  FIXLST
  550.        MOV  R4,@GENMEM        save # of pages avail.
  551.        SLA  R4,3
  552.        A    R4,@MEMSIZ        add "K" to mem size
  553.  
  554. OPASUX CI   R2,MEM96$
  555.        JEQ  OTAHER
  556.        CLR  R1
  557.        MOVB R1,*R2+
  558.        JMP  OPASUX
  559.  
  560. OTAHER MOVB @SVA000,@>8005    restore A000 page
  561.        B    *R10              and return
  562.  
  563. START  LWPI >83A0
  564.        MOV  @D10,@MEMSIZ
  565.  
  566. * Now determine if 9640 or 99/4A
  567.        MOV  @0,R0
  568.        INV  @0
  569.        CLR  @GENFLG
  570.        C    @0,R0
  571.        JEQ  DO994A
  572.  
  573. * 9640 Handling
  574.        MOV  R0,@0
  575.        LWPI >F000
  576.        MOV  @GENR5L,@PLVLP1+2
  577.        MOV  @GENR5L,@PLELP1+2
  578.        SETO @GENFLG
  579.        SETO @VDPFLG
  580.        A    @D96,@MEMSIZ
  581.        MOVB @>8005,@SVA000
  582.        JMP  CHKEXT
  583.  
  584. * 99/4A handling
  585. DO994A A    @D24,@MEMSIZ
  586.        CLR  @SCFLAG
  587.        MOV  @>6000,R1
  588.        INV  @>6000
  589.        C    R1,@>6000
  590.        JEQ  CK9938
  591.        SETO @SCFLAG
  592.        A    @D8,@MEMSIZ
  593.  
  594.        LI   R12,>0800
  595.        LDCR @SSPCDT+1,8
  596.        MOV  @FXH,@>6000
  597.        LDCR @SSPCDT,8
  598.        CLR  @SSFLAG
  599.        C    @>6000,@FXH
  600.        JEQ  CK9938
  601.        SETO @SSFLAG
  602.        A    @D24,@MEMSIZ
  603.  
  604. CK9938 BLWP @VMBWD
  605.        DATA >0400,FXH,2
  606.        LI   R0,>0E01
  607.        BLWP @VWTR
  608.        BLWP @VMBRD
  609.        DATA >0400,TSTIT,2
  610.        CLR  @VDPFLG
  611.        C    @TSTIT,@FXH
  612.        JEQ  ISTART
  613.        SETO @VDPFLG
  614.        A    @D96,@MEMSIZ
  615.  
  616. CHKEXT LI   R0,>118E
  617.        BLWP @VWTR
  618.        LI   R0,>2D40
  619.        BLWP @VWTR
  620.        MOVB @BYT0,@>8C06
  621.        BLWP @VMBWD
  622.        DATA >0500,H9938,2
  623.        BLWP @VMBRD
  624.        DATA >0500,TSTIT,2
  625.        CLR  @EXPFLG
  626.        LI   R0,>2D00
  627.        BLWP @VWTR
  628.        C    @TSTIT,@H9938
  629.        JNE  NOEXTR
  630.        SETO @EXPFLG
  631.        A    @D64,@MEMSIZ
  632. NOEXTR ABS  @GENFLG
  633.        JEQ  ISTART
  634.        BL   @GNINIT
  635.  
  636. ISTART LI   R0,SNDINI
  637.        LI   R15,>8400
  638. SNDINL MOVB *R0+,*R15
  639.        CI   R0,SNDINI+6
  640.        JNE  SNDINL
  641.  
  642.        LI   R1,NREGS
  643.        BL   @LDREGS
  644.        BL   @CLS
  645. ISTRT2 ABS  @OPNFIL
  646.        JEQ  MENLPG
  647.        BL   @CLOGIF
  648.        LI   R0,>480
  649.        BL   @CLOCVT
  650. MENLPG BLWP @VMBWD
  651.        DATA >800,DIVLIN,8
  652.        BLWP @VMBFD
  653.        DATA 80,0,40
  654.        LI   R3,STAB
  655. MENLOP MOV  *R3+,R0
  656.        JEQ  MENFIN
  657.        MOV  *R3+,R1
  658.        MOV  *R3+,R2
  659.        BLWP @VMBW
  660.        JMP  MENLOP
  661. MENFIN LI   R0,960
  662.        BL   @CHOICE
  663.        BYTE ' ','1','2','3'
  664.        BYTE '4','5','Q',0
  665.        DATA FXLOAD,FXPLAY,FXCNFG,DSKKAT
  666.        DATA CONVRT,QUITPG
  667.  
  668. QUITPG BLWP @0
  669.  
  670. HEXP   BYTE 'P'
  671. HEXCCC BYTE 'C'
  672.  
  673. *
  674. * Routine to get a file/path from user - 3 entries
  675. *
  676. * BL   @GETKAT
  677. * DATA DEVNAM
  678. *
  679. * BL   @GETDEV
  680. * DATA DEVNAM
  681. *
  682. * LI   R0,SCRN_LOC_PROMPT
  683. * LI   R1,PROMPT_TXT
  684. * LI   R2,PROMPT_LEN
  685. * BL   @GETDV
  686. * DATA DEVNAM
  687. *
  688.  
  689. GETKAT LI   R1,PTHMSG
  690.        JMP  GETDVK
  691. GETDEV LI   R1,MSG4
  692. GETDVK LI   R0,242
  693.        LI   R2,9
  694. GETDV  BLWP @VMBW
  695.        LI   R2,40
  696.        A    R2,R0
  697.        MOV  *R11+,R9
  698.        MOV  R11,@GETDVX+2
  699.        MOV  @-2(R9),R8        get length field (to place cursor)
  700.        BL   @REDLN2
  701.        DATA >207E
  702. GETDVX B    @0
  703.  
  704. *
  705. * Load Sound F/X file into memory!!!
  706. *
  707. D6     DATA 6
  708. D4     DATA 4
  709. SAVRT  DATA 0
  710.  
  711. FXLOAD BLWP @VMBFD
  712.        DATA 120,>2020,840
  713.        BLWP @VMBWD
  714.        DATA 174,MEN1+4,13
  715. *
  716. *  First, get the data into memory!
  717. *
  718.        BL   @PRSFNM
  719.        BL   @GETDEV
  720.        DATA DEVNAM
  721.        BL   @PRSFNM
  722.        BLWP @VMBWD
  723.        DATA >0400,DEVPAB,60  Now open the file
  724. * shave off filename!!!
  725.        MOV  @DEVLEN,R0
  726.        JEQ  FXZZZ
  727.        AI   R0,DEVNAM-1
  728. FXYYY  CB   *R0,@DECMAL
  729.        JEQ  FXZZZ
  730.        MOVB @SPC,*R0
  731.        DEC  R0
  732.        DEC  @DEVLEN
  733.        CI   R0,DEVNAM-1
  734.        JNE  FXYYY
  735. *
  736. FXZZZ  MOV  @GIFOPL,@>8356
  737.        BLWP @DSRLNK
  738.        DATA 8
  739.        JNE  NOPNER
  740.        BL   @CLOGIF          If an error, do a CLOSE and exit
  741.        CLR  @SNDMEM
  742.        B    @ERRHDL
  743.  
  744. NOPNER LI   R0,>0400         File is now opened
  745.        LI   R1,>0200
  746.        BLWP @VSBW
  747.        BLWP @VMBWD
  748.        DATA 935,LOADTX,10
  749.        SETO @OPNFIL
  750.        SETO @NOGEN           Set all extended memory flags to "not used"
  751.        SETO @NOCPU
  752.        SETO @NOSCRT
  753.        SETO @NOEXP
  754.        SETO @NO9938
  755.        BL   @VRREAD          Get 10K console vram
  756.        BLWP @VMBWD
  757.        DATA >0C00,>A000,>2800
  758. XITFXL C    @>A000,@FXH
  759.        JEQ  YUPPFX
  760.        BL   @CLOGIF
  761.        BLWP @VMBWD
  762.        DATA 925,NOTFXF,30
  763.        B    @DEATH
  764. YUPPFX NEG  R9
  765.        AI   R9,80            Jmp if no records loaded
  766.        JEQ  DEATH4
  767.        MOV  @>A002,@CHNFLG    get chain flag
  768.        SETO @SNDMEM
  769.        SLA  R9,7
  770.        MOV  R9,@VIDSIZ        # of bytes in counter
  771.        S    @D8,@VIDSIZ
  772.        CI   R9,>2800
  773.        JNE  DEATH4
  774.  
  775. USE38  ABS  @VDPFLG
  776.        JEQ  USECPU
  777.        CLR  @VDPPGS           Load 9938 VRAM
  778.        CLR  @EXPPGS
  779. USE38A BL   @VDREAD
  780.        NEG  R9
  781.        AI   R9,128
  782.        JEQ  FIN38
  783.        CLR  @NO9938           make sure flag is reset IF data is placed here
  784.        INC  @VDPPGS
  785.        MOVB @VDPPGS+1,@>8C06
  786.        BLWP @VMBWD
  787.        DATA >0,>A000,>4000
  788.        MOVB @BYT0,@>8C06
  789.        SLA  R9,7
  790.        MOV  R9,@VDPEND
  791.        CI   R9,>4000
  792.        JNE  FIN38
  793.        C    @VDPPGS,@D6
  794.        JNE  USE38A
  795. * try exp vram
  796.        ABS  @EXPFLG
  797.        JEQ  USECPU
  798. USE38C BL   @VDREAD
  799.        NEG  R9
  800.        AI   R9,128
  801.        JEQ  FIN38
  802.        CLR  @NOEXP            ensure reset flag
  803.        LI   R0,>2D40
  804.        BLWP @VWTR
  805.        MOVB @EXPPGS+1,@>8C06
  806.        BLWP @VMBWD
  807.        DATA 0,>A000,>4000
  808.        MOVB @BYT0,@>8C06
  809.        LI   R0,>2D00
  810.        BLWP @VWTR
  811.        SLA  R9,7
  812.        MOV  R9,@EXPEND
  813.        INC  @EXPPGS
  814.        CI   R9,>4000
  815.        JNE  FIN38
  816.        C    @EXPPGS,@D4
  817.        JNE  USE38C
  818.        JMP  USECPU
  819.  
  820. FIN38
  821. DEATH4 JMP  DEATH3
  822.  
  823. USECPU ABS  @GENFLG
  824.        JNE  LDFXGN
  825.  
  826.        BL   @TIREAD
  827.        CI   R9,192
  828.        JEQ  FIN38
  829.        CLR  @NOCPU            clear CPU used flag
  830.        NEG  R9
  831.        SLA  R9,7
  832.        MOV  R9,@ENDADR
  833.        JNE  DEATH3
  834.  
  835.        CLR  @SSPGS
  836.        ABS  @SCFLAG
  837.        JEQ  DEATH3
  838. SSLODL MOV  @SSPGS,R1
  839.        LI   R12,>800
  840.        LDCR @SSPCDT(R1),8
  841.        BL   @SCREAD
  842.        CI   R9,64
  843.        JEQ  DEATH3
  844.        CLR  @NOSCRT           clr SCRT used flag
  845.        INC  @SSPGS
  846.        NEG  R9
  847.        SLA  R9,7
  848.        AI   R9,>8000
  849.        MOV  R9,@SCEND
  850.        CI   R9,>8000
  851.        JNE  DEATH3
  852.        ABS  @SSFLAG
  853.        JEQ  DEATH3
  854.        C    @SSPGS,@D4
  855.        JNE  SSLODL
  856.  
  857. DEATH3 BLWP @VMBWD
  858.        DATA 934,MSG6K,13
  859. *
  860. DEATH2 BL   @CLOGIF
  861. *
  862. DEATH  LI   R0,>03C0
  863.        BL   @KEYIN
  864.        B    @ISTART
  865.  
  866. * 9640 memory loader
  867. LDFXGN MOV  @GENMEM,R4
  868.        LI   R5,MEM964
  869.        CLR  @SSPGS
  870. LDFXG2 MOVB *R5+,@>8005
  871.        BL   @READRC
  872.        NEG  R9
  873.        SLA  R9,7
  874.        AI   R9,>C000
  875.        CI   R9,>A000
  876.        JEQ  DEATH3
  877.        CLR  @NOGEN            clear 9640 mem flag
  878.        MOV  R9,@SCEND
  879.        INC  @SSPGS
  880.        DEC  R4
  881.        JEQ  DEATH3
  882.        CI   R9,>C000
  883.        JEQ  LDFXG2
  884.        JMP  DEATH3
  885.  
  886. *
  887. * Here is the F/X play module
  888. *
  889.  
  890. FXPLAY ABS  @SNDMEM           if no sound loaded, exit
  891.        JNE  FXPLY2
  892.        B    @ISTART
  893. FXPLY2 BLWP @VMBWD
  894.        DATA 934,PLYTXT,12
  895.        LI   R8,>8300
  896.        LI   R9,>832A
  897.        MOV  @DELCNT,R0        if 0, use 11 KHz player
  898.        JEQ  FXPLY3
  899.        LI   R8,TIPLP
  900.        LI   R9,TIVLP
  901.        CI   R0,1
  902.        JEQ  FXPLY3
  903.        DEC  @DELCNT
  904.        LI   R8,TIPLPD
  905.        LI   R9,TIVLPD
  906.  
  907. FXPLY3
  908.        LI   R12,>0800
  909.        LI   R13,>8800
  910.        LI   R15,>8400
  911.        LI   R0,>8300
  912.        LI   R3,TIPLP
  913.        LI   R4,TIPLP$-TIPLP
  914. LODPAD MOV  *R3+,*R0+
  915.        DECT R4
  916.        JNE  LODPAD
  917.        MOV  @VIDSIZ,R2
  918.        LI   R0,>080C
  919.        MOVB R0,@>8C02
  920.        SWPB R0
  921.        MOVB R0,@>8C02
  922.        MOV  @VDPPGS,R4
  923.        LI   R5,1
  924.        LI   R1,>A000
  925.        ABS  @NO9938
  926.        JEQ  HITIT
  927.        BL   *R9
  928.        JMP  CKPCPU
  929. PLVLP  LI   R2,>4000
  930.        DEC  R4
  931.        JNE  PLVLP1
  932.        MOV  @VDPEND,R2
  933. PLVLP1 MOVB @>83AB,@>8C06
  934.        CLR  R0
  935.        MOVB R0,@>8C02
  936.        INC  R5
  937.        MOVB R0,@>8C02
  938. HITIT  BL   *R9
  939.        MOV  R4,R4
  940.        JNE  PLVLP
  941.  
  942.        ABS  @NOEXP
  943.        JNE  VDRSET
  944.        MOV  @EXPPGS,R4
  945.        CLR  R5
  946.        LI   R0,>40AD
  947.        MOVB R0,@>8C02
  948.        SWPB R0
  949.        MOVB R0,@>8C02
  950. PLELP  LI   R2,>4000
  951.        DEC  R4
  952.        JNE  PLELP1
  953.        MOV  @EXPEND,R2
  954. PLELP1 MOVB @>83AB,@>8C06
  955.        CLR  R0
  956.        MOVB R0,@>8C02
  957.        INC  R5
  958.        MOVB R0,@>8C02
  959.        BL   *R9
  960.        MOV  R4,R4
  961.        JNE  PLELP
  962.        LI   R0,>00AD
  963.        MOVB R0,@>8C02
  964.        SWPB R0
  965.        MOVB R0,@>8C02
  966. VDRSET MOVB @BYT0,@>8C06
  967. CKPCPU ABS  @NOCPU
  968.        JNE  CKP964
  969.        MOV  @ENDADR,R2
  970.        BL   *R8
  971.        ABS  @NOSCRT
  972.        JNE  SKPZIT
  973.        MOV  @SSPGS,R4
  974.        CLR  R5
  975. SSPLLP LDCR @SSPCDT(R5),8
  976.        LI   R2,>8000
  977.        DEC  R4
  978.        JNE  SSPLY
  979.        MOV  @SCEND,R2
  980. SSPLY  LI   R1,>6000
  981.        BL   *R8
  982.        INC  R5
  983.        MOV  R4,R4
  984.        JNE  SSPLLP
  985.  
  986. CKP964 ABS  @NOGEN
  987.        JNE  SKPZIT
  988.        MOV  @SSPGS,R4
  989.        LI   R5,MEM964
  990. P964LP MOVB *R5+,@>8005
  991.        LI   R2,>C000
  992.        DEC  R4
  993.        JNE  P96PLY
  994.        MOV  @SCEND,R2
  995. P96PLY LI   R1,>A000
  996.        BL   *R8
  997.        MOV  R4,R4
  998.        JNE  P964LP
  999.        MOVB @SVA000,@>8005
  1000.  
  1001. SKPZIT CI   R8,TIPLPD
  1002.        JNE  SKPZT2
  1003.        INC  @DELCNT
  1004. SKPZT2 B    @ISTART
  1005.  
  1006. * Currently is >54 bytes long (>8300->8354) - 99/4A 11 KHz
  1007. TIPLP  MOVB *R1+,R3           >8300
  1008.        SRL  R3,8
  1009.        MOVB @BLKDAT(R3),*R15
  1010.        MOVB @BLKDA2(R3),*R15
  1011.        MOVB @BLKDA3(R3),*R15
  1012.        SRC  R3,8
  1013.        SRC  R3,8
  1014.        ANDI R3,>F
  1015.        MOVB @BLKTB1(R3),*R15
  1016.        MOVB @BLKTB2(R3),*R15
  1017.        MOVB @BLKTB3(R3),*R15
  1018.        C    R1,R2
  1019.        JNE  TIPLP
  1020.        RT
  1021. TIVLP  MOVB *R13,R3            >832A
  1022.        SRL  R3,8
  1023.        MOVB @BLKDAT(R3),*R15
  1024.        MOVB @BLKDA2(R3),*R15
  1025.        MOVB @BLKDA3(R3),*R15
  1026.        SRC  R3,8
  1027.        SRC  R3,8
  1028.        ANDI R3,>F
  1029.        MOVB @BLKTB1(R3),*R15
  1030.        MOVB @BLKTB2(R3),*R15
  1031.        MOVB @BLKTB3(R3),*R15
  1032.        DEC  R2
  1033.        JNE  TIVLP
  1034.        RT
  1035. TIPLP$
  1036.  
  1037. TIPLPD MOV  R11,R10
  1038. TIPLDL MOVB *R1+,R3
  1039.        SRL  R3,8
  1040.        MOVB @BLKDAT(R3),*R15
  1041.        MOVB @BLKDA2(R3),*R15
  1042.        MOVB @BLKDA3(R3),*R15
  1043.        BL   @DELAY
  1044.        ANDI R3,>F
  1045.        MOVB @BLKTB1(R3),*R15
  1046.        MOVB @BLKTB2(R3),*R15
  1047.        MOVB @BLKTB3(R3),*R15
  1048.        BL   @DELAY
  1049.        C    R1,R2
  1050.        JNE  TIPLDL
  1051. TIPLDZ B    *R10
  1052.  
  1053. TIVLPD MOV  R11,R10
  1054. TIVLDL MOVB *R13,R3
  1055.        SRL  R3,8
  1056.        MOVB @BLKDAT(R3),*R15
  1057.        MOVB @BLKDA2(R3),*R15
  1058.        MOVB @BLKDA3(R3),*R15
  1059.        BL   @DELAY
  1060.        ANDI R3,>F
  1061.        MOVB @BLKTB1(R3),*R15
  1062.        MOVB @BLKTB2(R3),*R15
  1063.        MOVB @BLKTB3(R3),*R15
  1064.        BL   @DELAY
  1065.        DEC  R2
  1066.        JNE  TIVLDL
  1067.        B    *R10
  1068.  
  1069. * Delay routine - used by 99/4A and 9640 playback routines
  1070.  
  1071. DELCNT DATA 0                 min. value of 1
  1072.  
  1073. DELAY  MOV  @DELCNT,R0
  1074. DELAYL DEC  R0
  1075.        JNE  DELAYL
  1076.        RT
  1077.  
  1078. *
  1079. * F/X Configuration
  1080. *
  1081.  
  1082. BTMSCR TEXT 'Press: 1 - Increase Delay'
  1083. BTMSC2 TEXT '2 - Decrease Delay'
  1084. BTMSC3 TEXT 'FCTN 9 - Exit To Menu'
  1085. SPDTXT TEXT 'Delay Factor:'
  1086. DLYNUM TEXT '####'
  1087.  
  1088. FXCNFG BLWP @VMBFD
  1089.        DATA 120,>2020,840
  1090.        LI   R9,MEMTX2
  1091.        MOV  @MEMSIZ,R7
  1092.        LI   R2,4
  1093.        CLR  R15
  1094.        BL   @BINASC
  1095.        LI   R9,MAXTX2
  1096.        LI   R2,4
  1097.        CLR  R15
  1098.        MOV  @MEMSIZ,R7
  1099.        SLA  R7,2
  1100.        INC  R7
  1101.        BL   @BINASC
  1102.        BLWP @VMBWD
  1103.        DATA 172,MEN3+4,17
  1104.        BLWP @VMBWD
  1105.        DATA 330,MEMTXT,18
  1106.        BLWP @VMBWD
  1107.        DATA 407,MAXTXT,28
  1108.        BLWP @VMBWD
  1109.        DATA 847,BTMSCR,25
  1110.        BLWP @VMBWD
  1111.        DATA 894,BTMSC2,18
  1112.        BLWP @VMBWD
  1113.        DATA 929,BTMSC3,21
  1114.  
  1115. CCFGLP LI   R9,DLYNUM
  1116.        MOV  @DELCNT,R7
  1117.        LI   R2,4
  1118.        CLR  R15
  1119.        BL   @BINASC
  1120.        BLWP @VMBWD
  1121.        DATA 489,SPDTXT,17
  1122.        CLR  @>8374
  1123.        LI   R0,>03C0
  1124.        BL   @KEYIN
  1125.        CB   @>837C,@SPC
  1126.        JNE  CCFGLP
  1127.        CLR  R1
  1128.        MOVB @>8375,R1
  1129.        CI   R1,>3100
  1130.        JL   CCFGLP
  1131.        CI   R1,>3200
  1132.        JEQ  DECDEL
  1133.        JH   CCFGLP
  1134. INCDEL INC  @DELCNT
  1135.        JMP  CCFGLP
  1136. DECDEL DEC  @DELCNT
  1137.        JLT  INCDEL
  1138.        JMP  CCFGLP
  1139.  
  1140. *
  1141. * Here is the F/X conversion module
  1142. *
  1143.  
  1144. VOCTX  TEXT 'Crea'
  1145. FIRSTR DATA 0
  1146.  
  1147. CONVRT BLWP @VMBFD
  1148.        DATA 120,>2020,840
  1149.        BLWP @VMBWD
  1150.        DATA 171,MEN4A+4,18
  1151.        CLR  @SNDMEM
  1152. *
  1153. *  First, get the data into memory!
  1154. *
  1155. CONVRG BL   @PRSFNM
  1156.        LI   R0,242
  1157.        LI   R1,MSGINP
  1158.        LI   R2,15
  1159.        BL   @GETDV
  1160.        DATA DEVNAM
  1161.        BL   @PRSFNM
  1162.        BLWP @VMBWD
  1163.        DATA >0400,DEVPAB,60  Now open the file
  1164.        MOV  @GIFOPL,@>8356
  1165.        BLWP @DSRLNK
  1166.        DATA 8
  1167.        JNE  NCVTOE
  1168.        BL   @CLOGIF          If an error, do a CLOSE and get new filename
  1169.        JMP  CONVRG
  1170.  
  1171. NCVTOE LI   R0,>0400         Set INPUT file for READ
  1172.        LI   R1,>0200
  1173.        BLWP @VSBW
  1174.        SETO @OPNFIL
  1175.  
  1176. CNVRGO BL   @PRSCVT
  1177.        LI   R0,362
  1178.        LI   R1,MSGOUT
  1179.        LI   R2,16
  1180.        BL   @GETDV
  1181.        DATA CVTNAM
  1182.        BL   @PRSCVT
  1183.        BLWP @VMBWD
  1184.        DATA >0480,CVTPAB,60  Now open output file
  1185.        MOV  @CVTOPL,@>8356
  1186.        BLWP @DSRLNK
  1187.        DATA 8
  1188.        JNE  NCVTIE
  1189.        LI   R0,>0480
  1190.        BL   @CLOCVT
  1191.        SETO @OPNFIL
  1192.        JMP  CNVRGO
  1193.  
  1194. NCVTIE LI   R0,>0480          Set it for WRITE
  1195.        LI   R1,>0300
  1196.        BLWP @VSBW
  1197.  
  1198. GETAMP MOV  @AMPLVL,R6        now get amp level
  1199.        LI   R2,>A
  1200.        MPY  R2,R6
  1201.        LI   R9,AMPFAC
  1202.        LI   R2,3
  1203.        CLR  R15
  1204.        BL   @BINASC
  1205.        BLWP @VMBWD
  1206.        DATA 482,AMPTXT,26
  1207.        BLWP @VMBWD
  1208.        DATA 522,SPCMOD,37
  1209.        LI   R0,508
  1210.        BL   @KEYIN
  1211.        CI   R1,>2000
  1212.        JNE  CKRTNK
  1213.        INC  @AMPLVL
  1214.        C    @AMPLVL,@D16
  1215.        JL   GETAMP
  1216.        CLR  @AMPLVL
  1217. CKRTNK CI   R1,>0D00
  1218.        JNE  GETAMP
  1219.        LI   R1,>2000
  1220.        BLWP @VSBW
  1221.  
  1222.        SETO @FIRSTR
  1223.        BLWP @VMBFD
  1224.        DATA 522,>2020,37
  1225.        BLWP @VMBWD
  1226.        DATA 934,PROCTX,13
  1227.  
  1228. TRNSET CLR  R0                Set up translation tables
  1229.        LI   R1,>D000
  1230.        LI   R2,>D100
  1231. TRNST1 MOVB R0,*R1+
  1232.        MOVB R0,*R2+
  1233.        CI   R1,>D080
  1234.        JL   TRNST1
  1235.        LI   R0,>0F00
  1236.        LI   R3,>F000
  1237. TRNST2 MOVB R0,*R1+
  1238.        MOVB R3,*R2+
  1239.        CI   R1,>D100
  1240.        JNE  TRNST2
  1241.  
  1242.        MOV  @AMPLVL,R0
  1243.        MPY  @D7,R0
  1244.        AI   R1,>D010
  1245.        MOV  R1,R2
  1246.        AI   R2,>0100
  1247.        LI   R3,16
  1248.        S    @AMPLVL,R3
  1249.        LI   R4,>0100
  1250.        LI   R5,>1000
  1251. TRNST4 MOV  R3,R6
  1252. TRNST3 MOVB R4,*R1+
  1253.        MOVB R5,*R2+
  1254.        DEC  R6
  1255.        JNE  TRNST3
  1256.        AI   R4,>0100
  1257.        AI   R5,>1000
  1258.        CI   R4,>0F00
  1259.        JNE  TRNST4
  1260.  
  1261. * At this point, tables are set up
  1262.        BL   @READRC
  1263.        CI   R9,64
  1264.        JEQ  CVTXIT
  1265.        C    @VOCTX,@>A000
  1266.        JNE  CVTRAW
  1267.        C    @VOCTX+2,@>A002
  1268.        JEQ  CVTVOC
  1269.        JMP  CVTRAW
  1270. * conversion for raw (SND-type) files
  1271. CVTLOP BL   @READRC           8K read from file
  1272.        CI   R9,64
  1273.        JEQ  CVTXIT
  1274. CVTRAW NEG  R9
  1275.        SLA  R9,7
  1276.        AI   R9,>C000          r9 points to end of buffer
  1277.        LI   R0,>A000          R0 = INCOMING DATA
  1278.        LI   R1,>A000          R1 = OUTGOING DATA
  1279.  
  1280. CVTLP1 MOVB *R0+,R2
  1281.        SRL  R2,8
  1282.        MOVB @>D100(R2),*R1
  1283.        MOVB *R0+,R2
  1284.        SRL  R2,8
  1285.        SOCB @>D000(R2),*R1+
  1286.        C    R0,R9
  1287.        JL   CVTLP1
  1288.        CI   R9,>C000
  1289.        JEQ  NONUKE
  1290.        MOV  R9,R0
  1291. CVTSET SETO *R0+
  1292.        CI   R0,>C000
  1293.        JNE  CVTSET
  1294. NONUKE AI   R1,>607F
  1295.        SRL  R1,7
  1296.        ABS  @FIRSTR
  1297.        JEQ  FIRSTS
  1298.        LI   R0,>A000
  1299.        MOV  @FXH,*R0+
  1300.        CLR  *R0+
  1301.        CLR  *R0+
  1302.        CLR  *R0
  1303.        CLR  @FIRSTR
  1304. FIRSTS BL   @WRITRC
  1305.        CI   R9,>C000
  1306.        JEQ  CVTLOP
  1307. CVTXIT BL   @CLOGIF           Close files
  1308.        LI   R0,>0480
  1309.        BL   @CLOCVT
  1310.        LI   R0,CVTLEN
  1311.        LI   R1,DEVLEN
  1312.        LI   R2,42
  1313. NEWDFT MOV  *R0+,*R1+
  1314.        DECT R2
  1315.        JNE  NEWDFT
  1316.        BLWP @VMBWD
  1317.        DATA 923,CCPAK,35
  1318.        B    @DEATH
  1319.  
  1320. * conversion for a VOC-type file
  1321.  
  1322. CVTVOC LI   R13,>C000          r1 points to outgoing data stream
  1323.        MOV  @FXH,*R13+         set up header
  1324.        CLR  *R13+
  1325.        CLR  *R13+
  1326.        CLR  *R13+
  1327.        LI   R14,>A01A          r0 = incoming data ptr
  1328.        BL   @DOVOC
  1329.  
  1330. CVTVC1 BL   @FETCHR
  1331.        SRL  R15,8
  1332.        MOVB @>D100(R15),*R13
  1333.        DEC  @VOCLO
  1334.        JOC  CVTVC2
  1335.        DEC  @VOCHI
  1336.        JOC  CVTVC2
  1337.  
  1338.        BL   @DOVOC
  1339.  
  1340. CVTVC2 BL   @FETCHR
  1341.        SRL  R15,8
  1342.        SOCB @>D000(R15),*R13+
  1343.        DEC  @VOCLO
  1344.        JOC  CVTVC3
  1345.        DEC  @VOCHI
  1346.        JOC  CVTVC3
  1347.  
  1348.        BL   @DOVOC
  1349.  
  1350. CVTVC3 CI   R13,>D000
  1351.        JNE  CVTVC1
  1352.        LI   R1,32
  1353.        BL   @WRITVC
  1354.        LI   R13,>C000
  1355.        JMP  CVTVC1
  1356.  
  1357. FETCHR MOVB *R14+,R15
  1358.        CI   R14,>C000
  1359.        JNE  FTCH1
  1360.        MOV  R11,@SAVRT
  1361.        BL   @READRC
  1362.        MOV  @SAVRT,R11
  1363.        LI   R14,>A000
  1364. FTCH1  RT
  1365.  
  1366. VOCHI  DATA 0
  1367. VOCLO  DATA 0
  1368.  
  1369. DOVOC  MOV  R11,@DOVOCX+2
  1370.        BL   @FETCHR
  1371.        ANDI R15,>FF00
  1372.        JEQ  DOVOEF
  1373.        BL   @FETCHR
  1374.        MOVB R15,@VOCLO+1
  1375.        BL   @FETCHR
  1376.        MOVB R15,@VOCLO
  1377.        BL   @FETCHR
  1378.        CLR  @VOCHI
  1379.        MOVB R15,@VOCHI+1
  1380.        BL   @FETCHR
  1381.        BL   @FETCHR
  1382.        LI   R0,3
  1383.        S    R0,@VOCLO
  1384.        JOC  DOVOCG
  1385.        DEC  @VOCHI
  1386. DOVOCG MOV  @VOCLO,R0
  1387.        JNE  DOVOCX
  1388.        DEC  @VOCHI
  1389. DOVOCX B    @0
  1390.  
  1391. DOVOEF SETO R1
  1392.        MOV  R13,R9
  1393. DOVOE1 MOVB R1,*R13+
  1394.        CI   R13,>D000
  1395.        JNE  DOVOE1
  1396.        MOV  R9,R1
  1397.        AI   R1,>407F
  1398.        SRL  R1,7
  1399.        BL   @WRITVC
  1400.        B    @CVTXIT
  1401.  
  1402.  
  1403. DEVPAB DATA >0004
  1404. BUFLOC DATA >0500,>8080,>0000
  1405. DEVLEN DATA 0
  1406. DEVNAM TEXT '                                          '
  1407.  
  1408. CVTPAB DATA >0002
  1409. CVTBUF DATA >0600,>8080,>0000
  1410. CVTLEN DATA 0
  1411. CVTNAM TEXT '                                          '
  1412.  
  1413. HFF    DATA 255
  1414. SAVR1  DATA 0
  1415. FSIZE  DATA 0
  1416. DFLAG  DATA 0
  1417.  
  1418. CLOGIF LI   R0,>0400         Close an open FX file!
  1419. CLOCVT LI   R1,>0100
  1420.        BLWP @VSBW
  1421.        AI   R0,9
  1422.        MOV  R0,@>8356
  1423.        BLWP @DSRLNK
  1424.        DATA 8
  1425.        CLR  @OPNFIL
  1426.        RT
  1427.  
  1428. ERRHDL BLWP @VMBWD
  1429.        DATA 928,MSG6,24
  1430.        B    @DEATH
  1431.  
  1432. LOOPAC DATA 0                Accumulator for loop
  1433. RPRT   DATA 0
  1434.  
  1435. VDREAD LI   R1,>A000
  1436.        LI   R9,128
  1437.        JMP  READRS
  1438.  
  1439. SCREAD LI   R1,>6000
  1440.        LI   R9,64
  1441.        JMP  READRS
  1442.  
  1443. VRREAD LI   R1,>A000
  1444.        LI   R9,80
  1445.        JMP  READRS
  1446.  
  1447. TIREAD LI   R1,>A000
  1448.        LI   R9,192
  1449.        JMP  READRS
  1450.  
  1451. READRC LI   R9,64
  1452.        LI   R1,>A000
  1453. READRS LI   R2,>80
  1454. READRZ LI   R0,>0500
  1455. READRL MOV  @GIFOPL,@>8356
  1456.        BLWP @DSRLNK          Read 64 128 byte records from file, store them
  1457.        DATA 8
  1458.        JNE  NREDER
  1459.        CB   R0,@HEX5
  1460.        JNE  ERRHDL
  1461.        ABS  @CHNFLG
  1462.        JEQ  NCHNF
  1463.        BLWP @VMBWD
  1464.        DATA 883,CHAINT,36
  1465.        BLWP @VMBWD
  1466.        DATA 924,CHAIN2,34
  1467.        STWP R0
  1468.        MOV  R0,@RSTR0+2
  1469.        MOV  R0,@RRSTR0+2
  1470.        LWPI >8300
  1471.        LI   R0,>03C0
  1472.        BL   @KEYIN
  1473.        BLWP @VMBFD
  1474.        DATA 880,>2020,80
  1475.        ANDI R1,>7F00
  1476.        CI   R1,>0C00
  1477.        JEQ  RSTR0
  1478.        BLWP @VMBWD
  1479.        DATA 935,LOADTX,10
  1480.        LI   R0,>409
  1481.        BLWP @VSBR
  1482.        MOV  R1,R0
  1483.        SRL  R0,8
  1484.        DEC  R0
  1485.        AI   R0,>040A
  1486.        BLWP @VSBR
  1487.        AI   R1,>0100
  1488.        BLWP @VSBW
  1489.        LI   R0,>400
  1490.        CLR  R1
  1491.        BLWP @VSBW
  1492.        MOV  @GIFOPL,@>8356
  1493.        BLWP @DSRLNK
  1494.        DATA 8
  1495.        JEQ  ERRHDL
  1496.        LI   R0,>0400
  1497.        LI   R1,>0200
  1498.        BLWP @VSBW
  1499. RRSTR0 LWPI 0
  1500.        JMP  READRZ
  1501. RSTR0  LWPI 0
  1502. NCHNF  RT
  1503. NREDER BLWP @VMBR            If an error in 1st half, flag it!
  1504.        A    R2,R1
  1505.        DEC  R9
  1506.        JNE  READRL
  1507.        RT
  1508.  
  1509. WRITVC MOV  R1,R8
  1510.        LI   R1,>C000
  1511.        JMP  WRITR
  1512.  
  1513. WRITRC MOV  R1,R8
  1514.        LI   R1,>A000
  1515. WRITR  LI   R0,>0600
  1516.        LI   R2,>80
  1517. WRITRL BLWP @VMBW
  1518.        MOV  @CVTOPL,@>8356
  1519.        BLWP @DSRLNK
  1520.        DATA 8
  1521.        JEQ  WRITER
  1522.        A    R2,R1
  1523.        DEC  R8
  1524.        JNE  WRITRL
  1525.        RT
  1526.  
  1527. WRITER LI   R0,>0480
  1528.        BL   @CLOCVT
  1529.        BL   @CLOGIF
  1530.        B    @ERRHDL
  1531.  
  1532. PRSHDR MOV  R11,R10
  1533.        LI   R0,>0400         Put file in READ mode
  1534.        LI   R1,>200
  1535.        BLWP @VSBW
  1536.        BL   @READRC
  1537.        B    *R10
  1538.  
  1539. *
  1540. * Universal Diskette Catalog...
  1541. *
  1542.  
  1543. * convert floating point to ASCII
  1544. * R9 - point to destination rightmost byte+1
  1545. * R4 - if 0, positive number, -1 for negative
  1546.  
  1547. FLTBUF BSS 8
  1548.  
  1549. FLTASC MOV  R11,@FLTAX+2
  1550.        LI   R0,FLTBUF
  1551.        ABS  *R0
  1552. FLTNRM MOVB *R0,R3
  1553.        SWPB R3
  1554.        ANDI R3,>0007    Get exponent
  1555.        INC  R3          Make it a parsing index
  1556. FLTALP MOVB @FLTBUF(R3),R7   r7 contains number to 'ascify'
  1557.        SRL  R7,8
  1558.        LI   R15,2
  1559.        CI   R3,1
  1560.        JNE  FLTNPX
  1561.        CLR  R15
  1562. FLTNPX BL   @BINASN
  1563.        DEC  R3
  1564.        JNE  FLTALP
  1565. FLTAX  B    @0
  1566.  
  1567. PARSDR MOV  R6,R0            Fetch current pab address
  1568.        BLWP @VSBR
  1569.        INC  R0               Adjust pab address
  1570.        SRL  R1,8
  1571.        MOV  R1,R2
  1572.        JNE  PARSDD
  1573.        INCT R11
  1574.        RT
  1575. PARSDD MOV  *R11+,R1         Get dest address
  1576.        BLWP @VMBR            Read record
  1577.        A    R2,R0
  1578.        MOV  R0,R6
  1579.        RT
  1580.  
  1581. ZAPIT  MOV  *R11+,R9
  1582.        MOV  *R11+,R2
  1583. ZAPIT1 MOVB @SPC,*R9+
  1584.        DEC  R2
  1585.        JNE  ZAPIT1
  1586.        RT
  1587.  
  1588. KATCNT DATA 120
  1589. KATPAB DATA >000D,>0500,>0000,>0000
  1590. KATTX1 TEXT 'Dir: '
  1591. KATTNM TEXT 'XXXXXXXXXX'
  1592. KATT1A TEXT ' Size:'
  1593. KATT1B TEXT 'XXXXXX Free:'
  1594. KATT1C TEXT 'XXXXXX '
  1595. FILNMX TEXT '    XXXXXXXXXX '
  1596. FIL1SZ TEXT 'XXXXX  '
  1597. FIL1A  TEXT 'DIS/FIX '
  1598. FIL1B  TEXT 'XXXXXX '
  1599. FIL1C  TEXT 'P'
  1600.  
  1601. FILTBL DATA DISFIX,DISVAR,INTFIX,INTVAR
  1602.        DATA PROGRM,DIRECT,EMLATE
  1603. DISFIX TEXT 'Dis/Fix'
  1604. DISVAR TEXT 'Dis/Var'
  1605. INTFIX TEXT 'Int/Fix'
  1606. INTVAR TEXT 'Int/Var'
  1607. PROGRM TEXT 'Program'
  1608. DIRECT TEXT 'Dir    '
  1609. EMLATE TEXT 'Emulate'
  1610. MSGMOR TEXT '[More]'
  1611. DZXDZX DATA 0
  1612.  
  1613. DSKKAT BLWP @VMBFD
  1614. D120   DATA 120,>2020,840
  1615.        BLWP @VMBWD
  1616.        DATA 174,MEN4+4,12
  1617. * shave off filename!!!
  1618.        MOV  @DEVLEN,R0
  1619.        JEQ  DSKZZZ
  1620.        AI   R0,DEVNAM-1
  1621. DSKYYY CB   *R0,@DECMAL
  1622.        JEQ  DSKZZZ
  1623.        MOVB @SPC,*R0
  1624.        DEC  R0
  1625.        DEC  @DEVLEN
  1626.        CI   R0,DEVNAM-1
  1627.        JNE  DSKYYY
  1628. *
  1629. DSKZZZ BL   @GETKAT
  1630.        DATA DEVNAM
  1631. DTLENT BL   @PRSFNM
  1632.        MOV  @DEVLEN,R1
  1633.        CI   R1,40
  1634.        JEQ  DSKKAT
  1635.        AI   R1,DEVNAM
  1636.        CB   @>FFFF(R1),@DECMAL
  1637.        JEQ  NODOT$
  1638.        MOVB @DECMAL,*R1
  1639.        INC  @DEVLEN
  1640. NODOT$ BLWP @VMBWD
  1641.        DATA >0400,KATPAB,8
  1642.        BLWP @VMBWD
  1643.        DATA >0408,DEVLEN,50
  1644.        MOV  @GIFOPL,@>8356
  1645.        BLWP @DSRLNK
  1646.        DATA 8
  1647.        JNE  NOKTE1
  1648. NOKTE2 BLWP @VMBWD
  1649.        DATA 928,MSG6,24
  1650. NOKTE3 BL   @CLOGIF
  1651.        LI   R0,>03C0
  1652.        BL   @KEYIN
  1653.        B    @ISTART
  1654. NOKTE1 SETO @OPNFIL
  1655.        LI   R0,>0400         Put catalog in READ mode
  1656.        LI   R1,>0200
  1657.        BLWP @VSBW
  1658.        MOV  @GIFOPL,@>8356   Now get diskname and size info
  1659.        BLWP @DSRLNK
  1660.        DATA 8
  1661.        JEQ  NOKTE2
  1662.        BLWP @VMBFD
  1663.        DATA 0,>2020,80
  1664.        BLWP @VMBFD
  1665.        DATA 800,0,40
  1666.        BLWP @VMBWD
  1667.        DATA 846,USATXT,29
  1668.        BLWP @VMBWD
  1669.        DATA 884,LCDTXT,33
  1670.        BLWP @VMBWD
  1671.        DATA 922,DSPTXT,37
  1672.        SETO @DZXDZX
  1673.        CLR  R0
  1674.        LI   R1,DEVNAM
  1675.        MOV  @DEVLEN,R2
  1676.        BLWP @VMBW
  1677. *** beta test
  1678.        LI   R6,>0500         read diskname
  1679.        BL   @ZAPIT
  1680.        DATA KATTNM,10
  1681.        BL   @PARSDR
  1682.        DATA KATTNM
  1683.        BL   @PARSDR
  1684.        DATA FLTBUF
  1685.        MOVB @FLTBUF+1,R0     If not a dir, skip this
  1686.        JNE  DDIRSK
  1687.        BL   @PARSDR
  1688.        DATA FLTBUF
  1689.        BL   @ZAPIT
  1690.        DATA KATT1B,6
  1691.        BL   @FLTASC
  1692.        BL   @PARSDR
  1693.        DATA FLTBUF
  1694.        BL   @ZAPIT
  1695.        DATA KATT1C,6
  1696.        BL   @FLTASC
  1697. DEC40  EQU  $+2
  1698.        LI   R2,40
  1699.        JMP  FULDIR
  1700. DDIRSK LI   R2,15
  1701. FULDIR LI   R0,40
  1702.        LI   R1,KATTX1
  1703.        BLWP @VMBW
  1704. * diskname info is now displayed!
  1705. DMAINL BLWP @VMBFD
  1706.        DATA 120,>2020,680
  1707.        MOV  @D120,@KATCNT
  1708. DSUBML MOV  @GIFOPL,@>8356
  1709.        BLWP @DSRLNK
  1710.        DATA 8
  1711.        JEQ  NOKTE2       handle error
  1712.        LI   R6,>0500
  1713.        BL   @ZAPIT       get filename
  1714.        DATA FILNMX+4,10
  1715.        BL   @PARSDR
  1716.        DATA FILNMX+4
  1717.        MOV  R2,R2
  1718.        JNE  DMAINX
  1719.        C    @KATCNT,@D120
  1720.        JEQ  DPAUSL
  1721.        S    @DEC40,@KATCNT
  1722.        LI   R0,120
  1723.        JMP  DPAUL1
  1724.  
  1725. * handle last file screen
  1726.  
  1727. KLKLKL B    @NOKTE3
  1728.  
  1729. DMAINX BL   @PARSDR
  1730.        DATA FLTBUF
  1731.        MOVB @PROGRM,@FIL1C
  1732.        MOV  @FLTBUF,R1
  1733.        JLT  NEGGIT
  1734.        MOVB @SPC,@FIL1C
  1735. NEGGIT ABS  R1
  1736.        ANDI R1,>FF
  1737.        JEQ  NXTPDR
  1738.        SLA  R1,1
  1739.        MOV  @FILTBL-2(R1),R1
  1740.        LI   R0,FIL1A
  1741.        MOVB *R1+,*R0+
  1742.        MOVB *R1+,*R0+
  1743.        MOVB *R1+,*R0+
  1744.        MOVB *R1+,*R0+
  1745.        MOVB *R1+,*R0+
  1746.        MOVB *R1+,*R0+
  1747.        MOVB *R1,*R0
  1748. NXTPDR BL   @PARSDR
  1749.        DATA FLTBUF
  1750.        BL   @ZAPIT
  1751.        DATA FIL1SZ,5
  1752.        BL   @FLTASC
  1753.        BL   @PARSDR
  1754.        DATA FLTBUF
  1755.        BL   @ZAPIT
  1756.        DATA FIL1B,6
  1757.        ABS  @FLTBUF
  1758.        JEQ  NXTPDZ
  1759.        BL   @FLTASC
  1760. NXTPDZ MOV  @KATCNT,R0
  1761.        LI   R1,FILNMX
  1762.        LI   R2,38
  1763.        BLWP @VMBW
  1764.        A    @DEC40,R0
  1765. D800   EQU  $+2
  1766.        CI   R0,800
  1767.        JEQ  DPAUSL
  1768.        MOV  R0,@KATCNT
  1769.        JMP  DSUBML
  1770.  
  1771. * process "arrow"
  1772.  
  1773. DPAUSL MOV  @D120,R0
  1774.        C    R0,@KATCNT
  1775.        JNE  DPAUL1            If no files on screen, wait
  1776.        ABS  @DZXDZX
  1777.        JNE  KLKLKL
  1778. KZKZKZ BL   @CLOGIF           No need to display a blank scrn @ end
  1779.        B    @ISTART
  1780. DPAUL1 CLR  @DZXDZX
  1781.        LI   R1,'>>'
  1782.        ANDI R0,>0FFC
  1783.        INCT R0
  1784.        BLWP @VSBW
  1785.        BL   @KEYINB
  1786.        ANDI R1,>7F00
  1787.        CI   R1,>0A00
  1788.        JNE  DPAUL2
  1789. DOWNIT LI   R1,>2020
  1790.        BLWP @VSBW
  1791.        DECT R0
  1792.        C    R0,@KATCNT
  1793.        JEQ  DPAUL1
  1794.        AI   R0,40
  1795.        JMP  DPAUL1
  1796. DPAUL2 CI   R1,>0B00
  1797.        JEQ  UPIT
  1798.        ANDI R1,>5F00
  1799.        CI   R1,'X'*256
  1800.        JEQ  DOWNIT
  1801.        CI   R1,'E'*256
  1802.        JNE  DPAUL3
  1803. UPIT   LI   R1,>2020
  1804.        BLWP @VSBW
  1805.        DECT R0
  1806.        C    R0,@D120
  1807.        JEQ  DPAUL1
  1808.        AI   R0,-40
  1809.        JMP  DPAUL1
  1810. DPAUL3 MOV  R1,R1
  1811.        JNE  DPAUL4
  1812.        C    @KATCNT,@D760
  1813.        JEQ  DPAL99
  1814.        B    @KZKZKZ
  1815. DPAL99 B    @DMAINL
  1816. DPAUL4 CI   R1,'L'*256
  1817.        JNE  DPAUL5
  1818.        LI   R3,FXLOAD
  1819.        JMP  MBOX
  1820. DPAUL5 CI   R1,'C'*256
  1821.        JNE  DPAUL6
  1822.        LI   R3,CONVRT
  1823.        JMP  MBOX
  1824. DPAUL6 CI   R1,'S'*256
  1825.        JNE  DPAUL1
  1826.        AI   R0,22
  1827.        CLR  R1
  1828.        BLWP @VSBR
  1829.        CI   R1,'r'*256
  1830.        JEQ  DPAUL8
  1831.        AI   R0,-24
  1832.        JMP  DPAUL1
  1833. DPAUL8 LI   R3,DTLENT
  1834.        AI   R0,-22
  1835. MBOX   INCT R0
  1836.        LI   R1,DEVNAM
  1837.        LI   R2,10
  1838.        A    @DEVLEN,R1
  1839.        CI   R1,DEVNAM+31
  1840.        JL   DPAUL7
  1841.        MOV  R1,R4
  1842.        LI   R2,DEVNAM+40
  1843.        S    R2,R4
  1844. DPAUL7 BLWP @VMBR
  1845.        BL   @CLOGIF
  1846.        BLWP @VMBFD
  1847.        DATA 0,>2020,960
  1848.        BLWP @VMBWD
  1849.        DATA 8,MSG1,24
  1850.        BLWP @VMBWD
  1851.        DATA 45,MSG2,30
  1852.        BLWP @VMBFD
  1853.        DATA 80,0,40
  1854.        B    *R3
  1855.  
  1856. VWTR   DATA UTILWS,VWTR1
  1857. VWTR1  MOV  *R13,R0
  1858.        MOVB @UTILWS+1,@>8C02
  1859.        ORI  R0,>8000
  1860.        MOVB R0,@>8C02
  1861.        RTWP
  1862.  
  1863. KSCAN  DATA UTILWS,KSCAN1
  1864. KSCAN1 LWPI >83E0
  1865.        BL   @>E
  1866.        LWPI UTILWS
  1867.        RTWP
  1868.  
  1869. WTAD4  LI   R1,>4000
  1870. WTAD3  MOVB *R14+,R0
  1871.        MOVB *R14+,@>8C02
  1872.        SOC  R1,R0
  1873.        MOVB R0,@>8C02
  1874.        MOV  *R14+,R1
  1875.        MOV  *R14+,R2
  1876.        RT
  1877.  
  1878. H4000  EQU  $+2
  1879. WTAD2  LI   R1,>4000
  1880. WTAD   MOV  *R13,R0
  1881.        MOVB @UTILWS+1,@>8C02
  1882.        SOC  R1,R0
  1883.        MOVB R0,@>8C02
  1884.        MOV  @2(R13),R1
  1885.        MOV  @4(R13),R2
  1886.        RT
  1887.  
  1888. VSBW   DATA UTILWS,$+2
  1889.        BL   @WTAD2
  1890.        MOVB R1,@>8C00
  1891.        RTWP
  1892.  
  1893. VSBR   DATA UTILWS,VSBR1
  1894. VSBR1  CLR  R1
  1895.        BL   @WTAD
  1896.        MOVB @>8800,@2(R13)
  1897.        RTWP
  1898.  
  1899. VMBRD  DATA UTILWS,$+2
  1900.        CLR  R1
  1901.        BL   @WTAD3
  1902.        JMP  VMBR2
  1903. VMBR   DATA UTILWS,$+2
  1904.        CLR  R1
  1905.        BL   @WTAD
  1906. VMBR2  MOVB @>8800,*R1+
  1907.        DEC  R2
  1908.        JNE  VMBR2
  1909.        RTWP
  1910.  
  1911. VMBFD  DATA UTILWS,$+2
  1912.        BL   @WTAD4
  1913. VMBF2  MOVB R1,@>8C00
  1914.        DEC  R2
  1915.        JNE  VMBF2
  1916.        RTWP
  1917.  
  1918. VMBWD  DATA UTILWS,$+2
  1919.        BL   @WTAD4
  1920.        JMP  VMBW2
  1921. VMBW   DATA UTILWS,$+2
  1922.        BL   @WTAD2
  1923. VMBW2  MOVB *R1+,@>8C00
  1924.        DEC  R2
  1925.        JNE  VMBW2
  1926.        RTWP
  1927.  
  1928. PNTR   EQU  >8356
  1929. SCLEN  EQU  >8355
  1930. CRULST EQU  >83D0
  1931. SADDR  EQU  >83D2
  1932. GPLWS  EQU  >83E0
  1933. H20    DATA >2000
  1934. DECMAL TEXT '.'
  1935. HZZ    BYTE >AA
  1936. SAVTKX DATA 0
  1937.  
  1938. DSRLNK DATA DLNKWS,DLENTR
  1939.  
  1940. DLENTR MOV  *R14+,R5
  1941.        MOV  @TKX,@SAVTKX
  1942.        SZCB @H20,R15
  1943.        MOV  @PNTR,R0
  1944.        MOV  R0,R9
  1945.        AI   R9,-8
  1946.        BLWP @VSBR
  1947.        MOVB R1,R3
  1948.        SRL  R3,8
  1949.        SETO R4
  1950.        LI   R2,NAMBUF
  1951. LNK$LP INC  R0
  1952.        INC  R4
  1953.        CI   R4,7
  1954.        JGT  LNKERR
  1955.        C    R4,R3
  1956.        JEQ  LNK$LN
  1957.        BLWP @VSBR
  1958.        MOVB R1,*R2+
  1959.        CB   R1,@DECMAL
  1960.        JNE  LNK$LP
  1961. LNK$LN MOV  R4,R4
  1962.        JEQ  LNKERR
  1963.        CLR  @CRULST
  1964.        MOV  R4,@SCLEN-1
  1965.        INC  R4
  1966.        A    R4,@PNTR
  1967. SROM   LWPI GPLWS
  1968.        CLR  R1
  1969.        LI   R12,>1200
  1970.        JMP  NOOFF2
  1971. NOROM  SBZ  0
  1972. NOOFF  AI   R12,>100
  1973.        CLR  @CRULST
  1974.        CI   R12,>1200
  1975.        JEQ  NODSR
  1976.        CI   R12,>2000
  1977.        JNE  NOOFF2
  1978.        LI   R12,>1000
  1979. NOOFF2 MOV  R12,@CRULST
  1980.        SBO  0
  1981.        LI   R2,>4000
  1982.        CB   *R2,@HZZ
  1983.        JNE  NOROM
  1984.        A    @TYPE,R2
  1985.        JMP  SGO2
  1986. SGO    MOV  @SADDR,R2
  1987.        SBO  0
  1988. SGO2   MOV  *R2,R2
  1989.        JEQ  NOROM
  1990.        MOV  R2,@SADDR
  1991.        INCT R2
  1992.        MOV  *R2+,R9
  1993.        MOVB @SCLEN,R5
  1994.        JEQ  NAME2
  1995.        CB   R5,*R2+
  1996.        JNE  SGO
  1997.        SRL  R5,8
  1998.        LI   R6,NAMBUF
  1999. NAME1  CB   *R6+,*R2+
  2000.        JNE  SGO
  2001.        DEC  R5
  2002.        JNE  NAME1
  2003. NAME2  INC  R1
  2004. QCKENT BL   *R9
  2005. TKX    JMP  SGO
  2006.        SBZ  0
  2007.        LWPI DLNKWS
  2008.        MOV  @SAVTKX,@TKX
  2009.        MOV  R9,R0
  2010.        BLWP @VSBR
  2011.        SRL  R1,13
  2012.        JNE  IOERRZ
  2013.        RTWP
  2014.  
  2015. NODSR  LWPI DLNKWS
  2016. LNKERR CLR  R1
  2017. IOERRZ SWPB R1
  2018.        MOVB R1,*R13
  2019.        SOCB @H20,R15
  2020.        RTWP
  2021. UTILWS EQU  >8380
  2022. DLNKWS DATA 0,0,0,0,0
  2023. TYPE   DATA 0,0,0,0,0,0,0,0,0,0,0
  2024. NAMBUF BSS  8
  2025. SLAST  EQU  $
  2026. MKR    LWPI >BF00
  2027.        LI   R0,>2000
  2028.        LI   R1,>A000
  2029.        LI   R2,SLAST-SFIRST
  2030. SLLLLP MOV  *R1+,*R0+
  2031.        DECT R2
  2032.        JNE  SLLLLP
  2033.        B    @START
  2034.        END
  2035.